Ещё немного дневников разработчика приложения "Маяки России". Самое главное, о чём я сейчас расскажу, это статус проекта в целом. Но сначала немного о кэшировании. В "Маяках Прибалтики" все данные хранятся локально и кэшировать попросту нечего. В новом приложении все данные из интернета и надо а) дать возможность пользователю использовать приложение без интернета и б) несколько сократить передачу данных. Насколько я понял ситуацию, есть два способа: обычное кэширование и скачивание файлов с данными, то есть, что-то вроде offline-версии приложения. Первый способ комбинирует хранение данных и при этом их обновление, но имеет один недостаток - кэшем в первую очередь управляет ОС и нежданно-негаданно для пользователя она может этот кэш удалить. По умолчанию кэш хранится 30 дней, но из своей практики пользователя смартфона скажу, что вообще ни разу не имел проблем с нежелательно удалённым кэшем. Возможно, имеется в виду 30 дней, когда приложение ни разу не запускалось.
Теперь второй способ. У него есть один плюс: ОС не удалит файлы в тайне от пользователя. Больше плюсов нет. Никакой системы обновления данных тут не предусмотрено, так что, в любом случае, надо как-то комбинировать это с кэшем, а ещё придётся запрашивать у пользователя разрешение на использование памяти смартфона.
Очевидно, что первый способ - мой выбор. Так что я вторгся на совершенно новую для себя территорию и начал затачивать лапки под кэширование. Оказалось, во Flutter всё уже есть "из коробки", просто работать с этим удобнее через плагины. Для кэширования данных я использую flutter_cache_manager, а для фотографий - cached_network_image. Просто и очень удобно! Фактически всё делается само и я не должен думать где хранить, как хранить, как называть, как и когда обновлять. Важный нюанс - сама логика кэша. Это локальное сохранение получаемых данных. На практике это выливается в то, что без интернета будут доступны лишь те данные и фото, которые пользователь уже просматривал. То есть, если установить приложение, и запустить его в первый раз без интернета, никаких данных не будет. Также не будет данных, если без интернета попробовать открыть какой-то маяк или регион, который ранее не просматривался. Но в любом случае, я очень доволен тем, как это работает.
Совершенно отдельный вопрос - кэширование карты. Поизучав этот вопрос, я узнал, что в Mapbox можно скачивать и использовать локально хранящиеся тайлы карты. Если сделать соответствующую функцию, то пользователи приложения меня разорят, так как в месяц бесплатно можно качать определённое количество тайлов, а за остальные мне надо платить. Другой вопрос, что и не нужна такая функция, потому что Mapbox и так кэширует векторные карты. Это легко проверить в "Маяках Прибалтики", если удалить весь кэш приложения, открыть его и перейти там на карту, ничего не приближая (её первоначальный вид). После этого поставить режим "в самолёте" и открыть приложение заново. Теперь можно приближать, удалять и двигать, и будет хорошо видно, что закэшировано и с какой детализацией. Также, если какой-то из участков карты приближался и скачивались его более детализованные данные, они тоже кэшируются. Короче, очень неглупые люди API для Mapbox делали.
Теперь самое главное - статус проекта. В приложении готово всё, кроме карты. Возможно, будут какие-то косметические правки. Например, я не очень уверен в цветовой гамме, но я также понимаю, что это нездоровый перфекционизм. Карта в приложение не добавлена из-за Null safety. Последний официальный релиз плагина вышел давно (что само по себе плохой знак) и этот стандарт не поддерживает. Варианта два: либо отказаться от Null safety во всём приложении, либо использовать dev-версию карт, которая это поддерживает, но с которой на практике я так и не смог подружиться. Короче, есть причины оставить внедрение карты на самый последний момент.
На этом хорошие новости заканчиваются, потому что помимо программирования есть ещё и контент. Немного цифр. Тексты о маяках Эстонии я писал полтора года для сайта и потом пару месяцев переносил их и фотографии в приложение, это порядка 60 маяков. Тексты о маяках Латвии и Литвы писались полгода сразу на сайт и для приложения. В "Маяках России" самих маяков будет в 3-4 раза больше, чем в прибалтийском приложении. Я поставил себе цель писать по три текста в день. Мой 3d-принтер покрылся толстым слоем пыли, к эпоксидке я не прикасался больше месяца, а последняя поделка (второй экземпляр Таллиннского верхнего маяка в масштабе 1:500) так и стоит не доделанная. При этом, только в очень редкие дни я выполняю свой план и постоянно живу с ощущением, что я что-то кому-то должен. Это давит. Очевидно, план надо снижать, я уже готовлю себя к мысли, что в этом году релиза не будет. Более того, с фотографиями всё совсем вышло из-под контроля. То, что начиналось очень хорошо, скатилось в канаву: из всех людей, кто согласился помочь своими фотографиями, снимки прислали 12 человек, а это менее половины. Те, которые прислали, вы самые лучшие, спасибо вам огромнейшее! Остальным я пытался напоминать, кто-то отказывался от участия в проекте, кто-то игнорит, кто-то переходит на агрессию, мол, вообще не до меня. В итоге, сейчас я вообще не занимаюсь поиском фотографий.
Ладно, ныть мы все умеем, а что по существу? По существу, полностью готов регион Калининградской области (11 маяков), но нет фотографий к одному из маяков (Гвардейский). В Инстаграме я их нашёл, но получить не удалось. Следующий регион, Сахалин и Курилы - всего 45 маяков, из которых сейчас написаны тексты для 35, фотографии вообще не подготовлены. На следующей неделе необходимо его закончить. Дальше надо будет делать самые популярные регионы: Финский залив, Ладога, Онега, Белое и Баренцево моря. После этого, в теории, можно выпускать приложение и после этого добавлять остальные данные. Ещё есть идея - после релиза запустить открытый канал в Телеграме для обсуждения приложения. Такой вот роадмап.